package com.yhyl.nursing.controller;

import java.util.List;
import javax.servlet.http.HttpServletResponse;

import com.yhyl.common.core.domain.R;
import io.swagger.annotations.ApiImplicitParam;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.yhyl.common.annotation.Log;
import com.yhyl.common.core.controller.BaseController;
import com.yhyl.common.core.domain.AjaxResult;
import com.yhyl.common.enums.BusinessType;
import com.yhyl.nursing.domain.NursingProject;
import com.yhyl.nursing.service.INursingProjectService;
import com.yhyl.common.utils.poi.ExcelUtil;
import com.yhyl.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;






    /**
     * 护理项目Controller
     *
     * @author ruoyi
     * @date 2025-05-04
     */
    @RestController
    @RequestMapping("/serve/project")
    @Api(tags = "护理项目管理接口") // 描述该控制器的用途
    public class NursingProjectController extends BaseController {

        @Autowired
        private INursingProjectService nursingProjectService;

        // 查询护理项目列表
        @PreAuthorize("@ss.hasPermi('serve:project:list')")
        @GetMapping("/list")
        @ApiOperation("查询护理项目列表") // 方法描述
        public TableDataInfo list(
                @ApiParam(name = "nursingProject", value = "护理项目过滤条件") NursingProject nursingProject) { // 参数描述
            startPage();
            List<NursingProject> list = nursingProjectService.selectNursingProjectList(nursingProject);
            return getDataTable(list);
        }

        // 导出护理项目列表
        @PreAuthorize("@ss.hasPermi('serve:project:export')")
        @Log(title = "护理项目", businessType = BusinessType.EXPORT)
        @PostMapping("/export")
        @ApiOperation("导出护理项目数据到Excel")
        public void export(
                @ApiParam(name = "response", value = "HTTP响应对象，用于写入Excel文件输出流") HttpServletResponse response,
                @ApiParam(name = "nursingProject", value = "护理项目过滤条件，用于筛选导出数据") NursingProject nursingProject) {
            List<NursingProject> list = nursingProjectService.selectNursingProjectList(nursingProject);
            ExcelUtil<NursingProject> util = new ExcelUtil<>(NursingProject.class);
            util.exportExcel(response, list, "护理项目数据");
        }

        // 获取护理项目详细信息
        @ApiImplicitParam(name = "id", value = "护理项目ID", required = true, dataType = "Long", paramType = "path")
        @PreAuthorize("@ss.hasPermi('serve:project:query')")
        @GetMapping(value = "/{id}")
        @ApiOperation("获取单个护理项目的详细信息")
        public R<NursingProject> getInfo(
                @ApiParam(name = "id", value = "护理项目的唯一标识符") @PathVariable("id") Long id) {
            return R.ok(nursingProjectService.selectNursingProjectById(id));
        }

        // 新增护理项目
        @PreAuthorize("@ss.hasPermi('serve:project:add')")
        @Log(title = "护理项目", businessType = BusinessType.INSERT)
        @PostMapping
        @ApiOperation("新增一个护理项目")
        public AjaxResult add(
                @ApiParam(name = "nursingProject", value = "要新增的护理项目数据") @RequestBody NursingProject nursingProject) {
            return toAjax(nursingProjectService.insertNursingProject(nursingProject));
        }

        // 修改护理项目
        @PreAuthorize("@ss.hasPermi('serve:project:edit')")
        @Log(title = "护理项目", businessType = BusinessType.UPDATE)
        @PutMapping
        @ApiOperation("更新一个护理项目的信息")
        public AjaxResult edit(
                @ApiParam(name = "nursingProject", value = "包含更新数据的护理项目对象") @RequestBody NursingProject nursingProject) {
            return toAjax(nursingProjectService.updateNursingProject(nursingProject));
        }

        // 删除护理项目
        @PreAuthorize("@ss.hasPermi('serve:project:remove')")
        @Log(title = "护理项目", businessType = BusinessType.DELETE)
        @DeleteMapping("/{ids}")
        @ApiOperation("删除多个护理项目")
        public AjaxResult remove(
                @ApiParam(name = "ids", value = "要删除的护理项目的ID数组") @PathVariable Long[] ids) {
            return toAjax(nursingProjectService.deleteNursingProjectByIds(ids));
        }
        //查询所有护理项目
        @GetMapping("/all")
        @ApiOperation("查询所有护理项目")
        public AjaxResult listAll(){
            return AjaxResult.success(nursingProjectService.listAll());

        }
}
